package cn.schoolwow.quickflow.service.quickFlow.option;

import cn.schoolwow.quickflow.QuickFlow;
import cn.schoolwow.quickflow.domain.FlowConfig;
import cn.schoolwow.quickflow.listener.FlowConfigRequestDataHandler;
import cn.schoolwow.quickflow.listener.FlowMappingHandler;
import cn.schoolwow.quickflow.listener.SingleFlowListener;
import cn.schoolwow.quickflow.listener.TryCatchFinallyHandler;
import com.alibaba.fastjson.JSONObject;

public interface QuickFlowOption {
    /**
     * 开启调试模式
     */
    QuickFlow startDebugMode();

    /**
     * 停止调试模式
     */
    QuickFlow stopDebugMode();

    /**
     * 检查重复变量名
     */
    QuickFlow checkRepeatKeyName(boolean checkRepeatKeyName);

    /**
     * 是否打印执行路径,默认为true
     */
    QuickFlow printTrace(boolean printTrace);

    /**
     * 流程日志记录层级,默认为1
     */
    QuickFlow traceLevel(int traceLevel);

    /**
     * 是否忽略中断,默认为true
     */
    QuickFlow ignoreBroken(boolean ignoreBroken);

    /**
     * 是否忽略异常,默认为false
     */
    QuickFlow ignoreException(boolean ignoreException);

    /**
     * 指定流程名称和实例映射处理器
     */
    QuickFlow flowNameInstanceMappingHandler(FlowMappingHandler flowMappingHandler);

    /**
     * 指定try-catch-finally流程列表
     */
    QuickFlow tryCatchFinallyHandler(TryCatchFinallyHandler tryCatchFinallyHandler);

    /**
     * 指定try-catch-finally流程列表
     */
    QuickFlow tryCatchFinallyHandler(TryCatchFinallyHandler... tryCatchFinallyHandlerArray);

    /**
     * 流程执行前后事件监听
     */
    QuickFlow singleFlowListener(SingleFlowListener singleFlowListener);

    /**
     * 指定流程配置数据处理器
     */
    QuickFlow flowConfigRequestDataHandler(FlowConfigRequestDataHandler flowConfigRequestDataHandler);

    /**
     * 获取流程配置项
     * */
    JSONObject getFlowConfigRequestData(String name);

    /**
     * 保存流程配置项
     * */
    QuickFlow saveFlowConfigRequestData(String categoryName, String name, JSONObject requestData);

    /**
     * 获取全局配置信息
     * */
    FlowConfig getFlowConfig();
}
